package Creational.Prototype.shallowCopy;

//浅拷贝
//对基本数据类型进行值传递，对引用数据类型进行引用传递般的拷贝，此为浅拷贝。

//实现浅拷贝的步骤
//1、实现Cloneable接口
//2、复写clone方法，并 return super.clone()

//    可见，浅拷贝中：
//    如果原型对象的成员变量是值类型，将复制一份给克隆对象。
//    如果原型对象的成员变量是引用类型，只是进行值地址的传递，原型对象和克隆对象的成员变量指向相同的内存地址，所以克隆对象修改引用类型的数据，原型对象会也会跟着改变。
//浅拷贝指的是只是拷贝了对象的引用地址，彼此之间高耦合，一个改变，另一个可能也随之改变；
public class Person  implements Cloneable{ // 浅拷贝 step1

    public String perName;
    public int age;
    public Phone phone;
    @Override
    public Object clone() throws CloneNotSupportedException
    {
        return super.clone();// 浅拷贝 step2
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "info  :  goodsName:"+perName+"\n"+
                "age:"+age+"\n"+
                "phone.goodsName:"+phone.goodsName+"\n"+
                "phone.price:"+phone.price+"\n"+
                "phone.goodsId:"+phone.goodsId+"\n"
                ;
    }
}